home *** CD-ROM | disk | FTP | other *** search
/ Champak 141 / (Vol 141) Oct 17 2011.iso / Games / despereaux-swings.swf / scripts / Box2D / Dynamics / Contacts / b2PolyAndCircleContact.as < prev    next >
Encoding:
Text File  |  2011-10-17  |  5.9 KB  |  158 lines

  1. package Box2D.Dynamics.Contacts
  2. {
  3.    import Box2D.Collision.Shapes.b2CircleShape;
  4.    import Box2D.Collision.Shapes.b2PolygonShape;
  5.    import Box2D.Collision.Shapes.b2Shape;
  6.    import Box2D.Collision.b2Collision;
  7.    import Box2D.Collision.b2ContactPoint;
  8.    import Box2D.Collision.b2Manifold;
  9.    import Box2D.Collision.b2ManifoldPoint;
  10.    import Box2D.Common.Math.b2Vec2;
  11.    import Box2D.Common.b2Settings;
  12.    import Box2D.Dynamics.b2Body;
  13.    import Box2D.Dynamics.b2ContactListener;
  14.    
  15.    public class b2PolyAndCircleContact extends b2Contact
  16.    {
  17.       
  18.       private static const s_evalCP:b2ContactPoint = new b2ContactPoint();
  19.        
  20.       
  21.       private var m_manifolds:Array;
  22.       
  23.       private var m0:b2Manifold;
  24.       
  25.       public var m_manifold:b2Manifold;
  26.       
  27.       public function b2PolyAndCircleContact(param1:b2Shape, param2:b2Shape)
  28.       {
  29.          var _loc3_:b2ManifoldPoint = null;
  30.          m_manifolds = [new b2Manifold()];
  31.          m0 = new b2Manifold();
  32.          super(param1,param2);
  33.          m_manifold = m_manifolds[0];
  34.          b2Settings.b2Assert(m_shape1.m_type == b2Shape.e_polygonShape);
  35.          b2Settings.b2Assert(m_shape2.m_type == b2Shape.e_circleShape);
  36.          m_manifold.pointCount = 0;
  37.          _loc3_ = m_manifold.points[0];
  38.          _loc3_.normalImpulse = 0;
  39.          _loc3_.tangentImpulse = 0;
  40.       }
  41.       
  42.       public static function Destroy(param1:b2Contact, param2:*) : void
  43.       {
  44.       }
  45.       
  46.       public static function Create(param1:b2Shape, param2:b2Shape, param3:*) : b2Contact
  47.       {
  48.          return new b2PolyAndCircleContact(param1,param2);
  49.       }
  50.       
  51.       override public function GetManifolds() : Array
  52.       {
  53.          return m_manifolds;
  54.       }
  55.       
  56.       override public function Evaluate(param1:b2ContactListener) : void
  57.       {
  58.          var _loc2_:int = 0;
  59.          var _loc3_:b2Vec2 = null;
  60.          var _loc4_:b2Vec2 = null;
  61.          var _loc5_:b2ManifoldPoint = null;
  62.          var _loc6_:b2Body = null;
  63.          var _loc7_:b2Body = null;
  64.          var _loc8_:Array = null;
  65.          var _loc9_:b2ContactPoint = null;
  66.          var _loc10_:b2ManifoldPoint = null;
  67.          var _loc11_:Boolean = false;
  68.          var _loc12_:uint = 0;
  69.          var _loc13_:int = 0;
  70.          _loc6_ = m_shape1.m_body;
  71.          _loc7_ = m_shape2.m_body;
  72.          m0.Set(m_manifold);
  73.          b2Collision.b2CollidePolygonAndCircle(m_manifold,m_shape1 as b2PolygonShape,_loc6_.m_xf,m_shape2 as b2CircleShape,_loc7_.m_xf);
  74.          _loc8_ = [false,false];
  75.          (_loc9_ = s_evalCP).shape1 = m_shape1;
  76.          _loc9_.shape2 = m_shape2;
  77.          _loc9_.friction = m_friction;
  78.          _loc9_.restitution = m_restitution;
  79.          if(m_manifold.pointCount > 0)
  80.          {
  81.             _loc2_ = 0;
  82.             while(_loc2_ < m_manifold.pointCount)
  83.             {
  84.                (_loc10_ = m_manifold.points[_loc2_]).normalImpulse = 0;
  85.                _loc10_.tangentImpulse = 0;
  86.                _loc11_ = false;
  87.                _loc12_ = _loc10_.id._key;
  88.                _loc13_ = 0;
  89.                while(_loc13_ < m0.pointCount)
  90.                {
  91.                   if(_loc8_[_loc13_] != true)
  92.                   {
  93.                      if((_loc5_ = m0.points[_loc13_]).id._key == _loc12_)
  94.                      {
  95.                         _loc8_[_loc13_] = true;
  96.                         _loc10_.normalImpulse = _loc5_.normalImpulse;
  97.                         _loc10_.tangentImpulse = _loc5_.tangentImpulse;
  98.                         _loc11_ = true;
  99.                         if(param1 != null)
  100.                         {
  101.                            _loc9_.position = _loc6_.GetWorldPoint(_loc10_.localPoint1);
  102.                            _loc3_ = _loc6_.GetLinearVelocityFromLocalPoint(_loc10_.localPoint1);
  103.                            _loc4_ = _loc7_.GetLinearVelocityFromLocalPoint(_loc10_.localPoint2);
  104.                            _loc9_.velocity.Set(_loc4_.x - _loc3_.x,_loc4_.y - _loc3_.y);
  105.                            _loc9_.normal.SetV(m_manifold.normal);
  106.                            _loc9_.separation = _loc10_.separation;
  107.                            _loc9_.id.key = _loc12_;
  108.                            param1.Persist(_loc9_);
  109.                         }
  110.                         break;
  111.                      }
  112.                   }
  113.                   _loc13_++;
  114.                }
  115.                if(_loc11_ == false && param1 != null)
  116.                {
  117.                   _loc9_.position = _loc6_.GetWorldPoint(_loc10_.localPoint1);
  118.                   _loc3_ = _loc6_.GetLinearVelocityFromLocalPoint(_loc10_.localPoint1);
  119.                   _loc4_ = _loc7_.GetLinearVelocityFromLocalPoint(_loc10_.localPoint2);
  120.                   _loc9_.velocity.Set(_loc4_.x - _loc3_.x,_loc4_.y - _loc3_.y);
  121.                   _loc9_.normal.SetV(m_manifold.normal);
  122.                   _loc9_.separation = _loc10_.separation;
  123.                   _loc9_.id.key = _loc12_;
  124.                   param1.Add(_loc9_);
  125.                }
  126.                _loc2_++;
  127.             }
  128.             m_manifoldCount = 1;
  129.          }
  130.          else
  131.          {
  132.             m_manifoldCount = 0;
  133.          }
  134.          if(param1 == null)
  135.          {
  136.             return;
  137.          }
  138.          _loc2_ = 0;
  139.          while(_loc2_ < m0.pointCount)
  140.          {
  141.             if(!_loc8_[_loc2_])
  142.             {
  143.                _loc5_ = m0.points[_loc2_];
  144.                _loc9_.position = _loc6_.GetWorldPoint(_loc5_.localPoint1);
  145.                _loc3_ = _loc6_.GetLinearVelocityFromLocalPoint(_loc5_.localPoint1);
  146.                _loc4_ = _loc7_.GetLinearVelocityFromLocalPoint(_loc5_.localPoint2);
  147.                _loc9_.velocity.Set(_loc4_.x - _loc3_.x,_loc4_.y - _loc3_.y);
  148.                _loc9_.normal.SetV(m0.normal);
  149.                _loc9_.separation = _loc5_.separation;
  150.                _loc9_.id.key = _loc5_.id._key;
  151.                param1.Remove(_loc9_);
  152.             }
  153.             _loc2_++;
  154.          }
  155.       }
  156.    }
  157. }
  158.